home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / scsh-0.4 / scsh-0 / scsh-0.4.2 / scsh / syntax.scm < prev    next >
Text File  |  1995-10-13  |  2KB  |  72 lines

  1. ;;; Syntax definitions for scsh.
  2. ;;; Translating process forms into Scheme code.
  3. ;;; Copyright (c) 1993 by Olin Shivers.
  4.  
  5. (define-syntax define-simple-syntax
  6.   (syntax-rules ()
  7.     ((define-simple-syntax (name . pattern) result)
  8.      (define-syntax name (syntax-rules () ((name . pattern) result))))))
  9.  
  10. ;;; The three basic forms for running an extended process form:
  11. ;;; EXEC-EPF, &, and RUN. EXEC-EPF is the foundation.
  12.  
  13. (define-syntax exec-epf
  14.   (lambda (form rename compare)
  15.     (transcribe-extended-process-form (cdr form) rename compare)))
  16.  
  17. (define-simple-syntax (& . epf)
  18.   (fork (lambda () (exec-epf . epf))))
  19.  
  20. (define-simple-syntax (run . epf)
  21.   (wait (& . epf)))
  22.  
  23. ;;; Sequencing operators:
  24. ;;;
  25. ;;; (|| pf1 ... pfn)
  26. ;;;     Run each proc until one completes successfully (i.e., exit status 0).
  27. ;;;     Return true if some proc completes successfully; otherwise #f.
  28. ;;;
  29. ;;; (&& pf1 ... pfn) 
  30. ;;;     Run each proc until one fails (i.e., exit status non-0).
  31. ;;;     Return true if all procs complete successfully; otherwise #f.
  32.  
  33. ;;; WARNING: || is not a readable symbol in R4RS.
  34.  
  35. (define-simple-syntax (|| pf ...) (or  (zero? (run pf)) ...))
  36. (define-simple-syntax (:or: pf ...) (or  (zero? (run pf)) ...))
  37. (define-simple-syntax (&& pf ...) (and (zero? (run pf)) ...))
  38.  
  39. (define-simple-syntax (run/collecting fds . epf)
  40.   (run/collecting* `fds (lambda () (exec-epf . epf))))
  41.  
  42. (define-simple-syntax (run/port+proc . epf)
  43.   (run/port+proc* (lambda () (exec-epf . epf))))
  44.  
  45. (define-simple-syntax (run/port . epf)
  46.   (run/port* (lambda () (exec-epf . epf))))
  47.  
  48. (define-simple-syntax (run/strings . epf)
  49.   (run/strings* (lambda () (exec-epf . epf))))
  50.  
  51. (define-simple-syntax (run/file . epf)
  52.   (run/file* (lambda () (exec-epf . epf))))
  53.  
  54. (define-simple-syntax (run/string . epf)
  55.   (run/string* (lambda () (exec-epf . epf))))
  56.  
  57. (define-simple-syntax (run/sexp . epf)
  58.   (run/sexp* (lambda () (exec-epf . epf))))
  59.  
  60. (define-simple-syntax (run/sexps . epf)
  61.   (run/sexps* (lambda () (exec-epf . epf))))
  62.  
  63. (define-simple-syntax (run/pty . epf)
  64.   (run/pty* (lambda () (exec-epf . epf))))
  65.  
  66. ;(define (expand-mac transformer form)
  67. ;  (transformer form (lambda (x) x) eq?))
  68.  
  69. ;(define-simple-syntax (test-mac trans . form)
  70. ;  (pp (expand-mac trans (quote form))))
  71.  
  72.